package ControleurBelote;

//
// IUT de Nice / Departement informatique / Module APO-Java
// Annee 2011_2012 - Composants generiques
//
// Classe ControleurPanneauG - Exemple simplifie de controleur de panneau
//
// Edition Draft : demonstrateur de faisabilite
//
//    + Version 0.0.0	: version initiale
//    + Version 0.1.0   : introduction d'un constructeur normal et
//                        integration de tout l'ecouteur de souris
//    + Version 0.2.0   : gestion d'un tracker de tous les clics souris simples
//    + Version 0.3.0   : creation d'un point d'entree (demonstrateur)
//
// Edition A     : mise en oeuvre operationnelle
//
//    + Version 1.0.0   : ajout des accesseurs obtenirNombreClics et 
//                        obtenirDernierClic
//    + Version 1.1.0   : ajout de la methode attendreClic (non bloquante)
//    + Version 1.2.0   : suppression du demonstrateur embarque (transfert dans 
//                        la classe DemoPanneauG)
//    + Version 1.3.0   : introduction d'un nouveau constructeur et d'un nouvel
//                        attribut pour designer le modele de donnees associe
//
// Edition B     : derivation des classes ControleurG (super) et EspionG
//
//    + Version 2.0.0	: version initiale
//
// Edition C     : modification de l'identificateur de la vue (VuePanneauG)
//
//    + Version 3.0.0	: version initiale
//
// Edition D     : centralisation de la lecture du fichier de configuration
//                 et extension de l'observation et du pilotage de la vue
//
//    + Version 4.0.0	: introduction controle de validite des parametres 
//                        dans les deux constructeurs existants
//                        + ajout surcharge du constructeur par defaut 
//                        + ajout de deux nouveaux constructeurs pour creer
//                          automatiquement les deux autres composants du 
//                          modele MVC
//                        + ajout methode publique ajouterImage
//
// Auteur : A. Thuaire
//

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.HashMap;

import Config.Config;
import ModeleBelote.ModelePanneauG;
import VueBelote.VuePanneauG;
  
public class ControleurPanneauG extends ControleurG 
                                implements MouseListener, 
                                           MouseMotionListener {
private VuePanneauG       panneauCible;
private ModelePanneauG    modeleSupport;

// ---                                         Constructeur par defaut
   
   public ControleurPanneauG () {}
   
// ---                                         Premier constructeur normal
   
   public ControleurPanneauG (VuePanneauG p) throws Throwable {
   	
      // Controler la validite du parametre
      //
      if (p == null) throw new Throwable ("-2.1"); 
      
      panneauCible= p;
   }
   
// ---                                          Second constructeur normal
   
   public ControleurPanneauG (VuePanneauG p, ModelePanneauG m) 
                                             throws Throwable {
   	
   	  // Controler la validite des parametres
      //
      if (p == null) throw new Throwable ("-2.1");
      if (m == null) throw new Throwable ("-2.2");  
   	
      panneauCible = p;
   	  modeleSupport= m;
   }
   
// ---                                       Troisieme constructeur normal
   
   public ControleurPanneauG (Object hamecon,
   	                          String fichierConfig, 
                              String versionConfig) throws Throwable {
   	
      // Controler la validite des parametres
      //
      if (hamecon == null) throw new Throwable ("-2.1");
      if (fichierConfig == null) throw new Throwable ("-2.2");
      if (versionConfig == null) throw new Throwable ("-2.3");
      
      // Charger le fichier de configuration
      //
      HashMap config= (HashMap) Config.load (fichierConfig, versionConfig);
      if (config == null) throw new Throwable ("-3.1");
      
      // Creer et memoriser une vue en attribut
      //
      panneauCible= new VuePanneauG (hamecon, config);
      
      // Creer et memoriser en attribut un modele par defaut 
      //
      modeleSupport= new ModelePanneauG ();  
   }
   
// ---                                       Quatrieme constructeur normal
   
   public ControleurPanneauG (Object hamecon,
   	                          String fichierConfig, 
                              String versionConfig,
                              String sourceDonnees,
                              String versionDonnees) throws Throwable {
   	
      this (hamecon, fichierConfig, versionConfig);
      
      // Controler la validite des deux derniers parametres
      //
      if (sourceDonnees == null) throw new Throwable ("-2.4");
      if (versionDonnees == null) throw new Throwable ("-2.5");
      
      // Creer et memoriser en attribut le modele de donnees designe
      //
      modeleSupport= new ModelePanneauG (sourceDonnees, versionDonnees);  
   }
   
// ---                                              Methode ajouterImage
   
   public void ajouterImage (String cheminImage) throws Throwable {
   	
      // Controler la validite du parametre
      // 
      if (cheminImage == null) throw new Throwable ("-2.1");
      
      panneauCible.modifierImage(cheminImage);
   }

@Override
public void mouseDragged(MouseEvent arg0) {
	// TODO Auto-generated method stub
	
}

@Override
public void mouseMoved(MouseEvent arg0) {
	// TODO Auto-generated method stub
	
}

@Override
public void mouseClicked(MouseEvent arg0) {
	// TODO Auto-generated method stub
	
}

@Override
public void mouseEntered(MouseEvent arg0) {
	// TODO Auto-generated method stub
	
}

@Override
public void mouseExited(MouseEvent arg0) {
	// TODO Auto-generated method stub
	
}

@Override
public void mousePressed(MouseEvent arg0) {
	// TODO Auto-generated method stub
	
}

@Override
public void mouseReleased(MouseEvent arg0) {
	// TODO Auto-generated method stub
	
}
} 
